 /*****************************************************************************
 * Project 2 will implement a payroll system using abstract classes.          *
 *                                                                            *
 * A company pays its employees on a weekly basis. The employees are of four  *
 * types: Salaried employees are paid a fixed weekly salary regardless of the *
 * number of hours worked, hourly employees are paid by the hour and receive  *
 * overtime pay for all hours worked in excess of 40 hours, commission        *
 * employees are paid a percentage of their sales, and salaried commission    *
 * employees receive a base salary plus a percentage of their sales. For the  *
 * current pay period, the company has decided to reward salaried-commission  *
 * employees by adding 10% to their base salaries. The company wants to       *
 * implement a C# application that performs its payroll calculations          *
 * polymorphically.                                                           *
 *                                                                            *
 * Abstract base class Employee declares the interface to the hierarchy    *
 * that is, the set of methods that an application can invoke on all          *
 * employee objects. Each employee, regardless of the way his earnings are    *
 * calculated has a first name, a last name and a social security number, so  *
 * private instance variables firstName, lastName and socialSecurityNumber    *
 * appear in abstract base class Employee.                                    *
 *                                                                            *
 * Class Employee provides methods Earnings and ToString, in addition to the  *
 * properties that manipulate Employees instance variables. An Earnings      *
 * method certainly applies to all employees. But each earnings calculation   *
 * depends on the employees class. So we declare Earnings as abstract in     *
 * base class Employee. Each derived class overrides Earnings with an         *
 * appropriate implementation. To calculate an employees earnings, the       *
 * application assigns a reference to the employees object to a base class   *
 * Employee variable, then invokes the Earnings method on that variable.      *
 * You will maintain an array of Employee variables, each of which holds a    *
 * reference to an Employee object. The application iterates through the      *
 * array and calls method Earnings for each Employee object. C# processes     *
 * theses method calls polymorphically. Including Earnings as an abstract     *
 * method in Employee forces every directly derived class of Employee to      *
 * override Earnings with a method that performs an appropriate pay           *
 * calculation.                                                               *
 *                                                                            *
 * Method ToString in class Employee returns a string containing the first    *
 * name, last name, and social security number of the employee. Each derived  *
 * class of Employee overrides method ToString to create a string             *
 * representation of an object of that class containing the employees type,  *
 * followed by the rest of the employees information.                        *
 *****************************************************************************/